package main

import "fmt"
import "reflect"

func reflectValue(x interface{}) {
	// num, ok := x.(int)
	// if ok {
	// 	var b = 10 + num
	// 	fmt.Println("reflectValue:", b)
	// } else {
	// 	fmt.Println("类型转换错误")
	// }

	// 通过反射来实现这个功能
	// 这样获取的是显性值，这里是空接口，所以无法进行加法运算
	v := reflect.ValueOf(x)
	// 这样仍然会报错
	// var num = 10 + v
	// fmt.Println(num)

	// 通过反射获取变量的原始值
	// 这种写法看起来和强制类型转换（或者断言）很类似啊！
	var m = v.Int() + 12
	fmt.Println("reflectValue:", m)
}

func main() {
	var a = 10
	reflectValue(a)
}